/*
 *Promise 实例的 catch() 方法用于注册一个在 promise 被拒绝时调用的函数。
 *它会立即返回一个等效的 Promise 对象，这可以允许你链式调用其他 promise 的方法。
 *此方法是 Promise.prototype.then(undefined, onRejected) 的一种简写形式。
 */

Promise.prototype.catch = function (onRejected) {
  return this.then(undefined, onRejected);
};

/**
 *Promise.resolve() 静态方法以给定值“解决（resolve）”一个 Promise。
 *如果该值本身就是一个 Promise，那么该 Promise 将被返回；
 *如果该值是一个 thenable 对象，Promise.resolve() 将调用其 then() 方法及其两个回调函数；
 *否则，返回的 Promise 将会以该值兑现。
 */

 /**
  * 在 Promise 中，Thenable 指的是任何具有 then 方法的对象或函数。
  */

// 一个简单的 Thenable 对象
const myThenable = {
  then(onFulfilled) {
    setTimeout(() => onFulfilled("完成"), 1000);
  }
};
// 判断是否是一个Thenable
 function isPromiseLike(val) {
    return typeof val  === 'object' && typeof val.then === 'function'
 }


Promise.resolve = function (value) {
  if(value instanceof Promise){
    return value
  }
  if(isPromiseLike(value)){
    return new Promise((resolve,reject) => {
      value.then(resolve,reject)
    })
  }

  return new Promise((resolve) => {
    resolve(value)
  })
};


/**
 * Promise.reject() 静态方法返回一个已拒绝（rejected）的 Promise 对象，拒绝原因为给定的参数。
 */

Promise.reject = function (reason) {
  return new Promise((resolve,reject) => {
    reject(reason)
  })
};
